//package com.inspur.edp.bef.dtgenerator.core.mgrImpl;
//
//import com.fasterxml.jackson.core.JsonProcessingException;
//import com.fasterxml.jackson.databind.ObjectMapper;
//import com.inspur.edp.bef.api.attr.BeforeQueryDtmsAttribute;
//import com.inspur.edp.bef.api.attr.BeforeRetrieveDtmsAttribute;
//import com.inspur.edp.bef.bizentity.GspBizEntityObject;
//import com.inspur.edp.bef.bizentity.GspBusinessEntity;
//import com.inspur.edp.bef.bizentity.operation.BizMgrAction;
//import com.inspur.edp.bef.bizentity.operation.BizOperation;
//import com.inspur.edp.bef.bizentity.operation.internalmgraction.IInternalMgrAction;
//import com.inspur.edp.bef.dtgenerator.core.BefCoreGenCtx;
//import com.inspur.edp.bef.dtgenerator.core.determination.beforeRetrieve.B4RetrieveDtmAdaptorsGenerator;
//import com.inspur.edp.bef.dtgenerator.core.mgrImpl.beforeQueryDtm.B4QueryDtmAdaptorsGenerator;
//import com.inspur.edp.bef.dtgenerator.core.mgrImpl.mgrActionAssemblerFactory.MgrAssFactoryImplGenerator;
//import com.inspur.edp.bef.dtgenerator.core.mgrImpl.mgrMethods.MgrImpDeleteGenerator;
//import com.inspur.edp.bef.dtgenerator.core.mgrImpl.mgrMethods.MgrImpRetrieveGenerator;
//import com.inspur.edp.bef.dtgenerator.core.mgrImpl.mgrMethods.MgrImplMethodGenerator;
//import com.inspur.edp.bef.spi.manager.AbstractManager;
//import com.inspur.edp.caf.generator.BaseGenerator;
//import com.inspur.edp.caf.generator.baseInfo.AnnotationInfo;
//import com.inspur.edp.caf.generator.baseInfo.AnnotationType;
//import com.inspur.edp.caf.generator.baseInfo.TypeInfo;
//import com.inspur.edp.caf.generator.method.ClassMethodGenerator;
//import com.inspur.edp.cef.entity.config.MgrConfig;
//import com.inspur.edp.cef.gencommon.MediateType;
//import com.inspur.edp.cef.generator.coreGenerator.base.entityGenerator.determinations.DtmTypeInfo;
//import com.inspur.edp.cef.generator.coreGenerator.base.entityGenerator.validations.ValTypeInfo;
//import com.inspur.edp.cef.generator.coreGenerator.base.mgrGenerator.MgrInplGenCtx;
//import com.inspur.edp.cef.generator.coreGenerator.entityGenerator.mgrGenerator.EntityMgrImplGenerator;
//import com.inspur.edp.das.commonmodel.IGspCommonModel;
//import java.util.ArrayList;
//import java.util.Arrays;
//import lombok.var;
//import org.eclipse.jdt.core.dom.Expression;
//import org.eclipse.jdt.core.dom.StringLiteral;
//import org.eclipse.jdt.core.dom.TypeLiteral;
//
//public class BEMgrImplGenerator extends EntityMgrImplGenerator {
//  private static final String className = "MgrActionAssemblerFactory";
//
//  // region Static Members
//  private static final String nameSuffix = "BEManager";
//
//  public BEMgrImplGenerator(BefCoreGenCtx coreGenContext) {
//    super(coreGenContext);
//  }
//
//  public static String getName(IGspCommonModel model) {
//    return model.getCode() + nameSuffix;
//  }
//
//  public BefCoreGenCtx getBefCoreGenCtx() {
//    return (BefCoreGenCtx) super.getCoreGenContext();
//  }
//
//  @Override
//  protected BEMgrImplGenCtx getContext() {
//    return (BEMgrImplGenCtx) super.getContext();
//  }
//
//  private ArrayList<TypeLiteral> getInitializer(ArrayList<MediateType> types) {
//    ArrayList<TypeLiteral> list = new ArrayList<TypeLiteral>();
//
//    for (var item : types) {
//      var type = ast.newTypeLiteral();
//      type.setType(ast.newSimpleType(ast.newName(item.getFullName())));
//
//      list.add(type);
//    }
//    return list;
//  }
//
//  @Override
//  protected MgrInplGenCtx createMgrImplGenCtx() {
//    return new BEMgrImplGenCtx(getBefCoreGenCtx());
//  }
//
//  @Override
//  protected java.util.ArrayList<TypeInfo> addParentInterfaces() {
//    var interfaceType = this.getCoreGenContext().getCefGenContext().getMgrInterfaceType();
//    var typeInfo = new TypeInfo(interfaceType.getClassName());
//    typeInfo.setTypePackageName(interfaceType.getNamespace());
//    return new ArrayList<TypeInfo>(Arrays.asList(typeInfo));
//  }
//
//  private java.lang.Class getMgrInterfaceType() {
//
//    var cefContext = getBefCoreGenCtx().getCefGenContext();
//
//    var be =
//        (GspBusinessEntity)
//            ((cefContext.getMetadata().getContent() instanceof GspBusinessEntity)
//                ? cefContext.getMetadata().getContent()
//                : null);
//
//    var beNamespace = be.getApiNamespace().getDefaultNamespace();
//
//    var beClassName = "I" + be.getCode() + className;
//
//    try {
//      return Class.forName((new MediateType(beNamespace, beClassName).getFullName()));
//    } catch (ClassNotFoundException e) {
//      throw new RuntimeException();
//    }
//    //		var type = cefContext.getProjectApiAssembly().GetType((new MediateType(beNamespace,
//    // beClassName)).FullName);
//    //		return type;
//  }
//
//  @Override
//  protected java.lang.Class getImplParentClassType() {
//    // var parentType = coreGenCtx.BEGenContext.BE.HasParentBe() ? GetParentType() :
//    // typeof(AbstractManager);
//    return AbstractManager.class;
//  }
//
//  @Override
//  protected java.util.ArrayList<ClassMethodGenerator> getMgrActionGenerators() {
//
//    ArrayList<ClassMethodGenerator> generators = new ArrayList<>();
//    var actions = getBefCoreGenCtx().getBeGenCtx().getBE().getBizMgrActions();
//    for (BizOperation action : actions) {
//      if(action instanceof IInternalMgrAction){
//        continue;
//      }
//      BizMgrAction mgrAction = (BizMgrAction) action;
//      if (mgrAction == null) {
//        continue;
//      }
//      generators.add(createMgrMethodGenerator(mgrAction));
//    }
//    for (GspBizEntityObject node : getBefCoreGenCtx().getBeGenCtx().getBE().getAllNodes()) {
//      if (!node.getIsRootNode()) {
//        generators.add(createMgrDeleteMethodGenerator(node));
//        generators.add(createMgrRetrieveMethodGenerator(node));
//      }
//    }
//    return generators;
//  }
//
//  private ClassMethodGenerator createMgrMethodGenerator(BizMgrAction action) {
//    return new MgrImplMethodGenerator(
//        action, getBefCoreGenCtx(), getBefCoreGenCtx().getBeGenCtx().getMetadataPool());
//  }
//
//  private ClassMethodGenerator createMgrDeleteMethodGenerator(GspBizEntityObject node) {
//    return new MgrImpDeleteGenerator(node);
//  }
//
//  private ClassMethodGenerator createMgrRetrieveMethodGenerator(GspBizEntityObject node) {
//    return new MgrImpRetrieveGenerator(node);
//  }
//
//  @Override
//  protected String getName() {
//    return getName(getBefCoreGenCtx().getBeGenCtx().getBE());
//  }
//
//  @Override
//  protected ArrayList<AnnotationInfo> getExtendAttributes() {
//
//    ArrayList<AnnotationInfo> list = super.getExtendAttributes();
//    list.add(getAssemblerAttribute());
//    list.add(getBeforeQueryDtmAttr());
//    list.add(getBeforeRetrieveDtmAttr());
//    list.add(getUQConstraintAttribute());
//    addVarConfigAttribute(list);
//    return list;
//  }
//
//  private AnnotationInfo getBeforeRetrieveDtmAttr() {
//    AnnotationInfo tempVar = new AnnotationInfo();
//
//    var typeInfo = new TypeInfo(BeforeRetrieveDtmsAttribute.class);
//    tempVar.setTypeInfo(typeInfo);
//    tempVar.setAnnotationType(AnnotationType.SingleMember);
//
//    var param = getDtmAttribute(getContext().getBeforeRetrieveDtmInfo());
//    tempVar.setSingleParam(param);
//    return tempVar;
//  }
//
//  private AnnotationInfo getBeforeQueryDtmAttr() {
//    AnnotationInfo tempVar = new AnnotationInfo();
//
//    var typeInfo = new TypeInfo(BeforeQueryDtmsAttribute.class);
//    tempVar.setTypeInfo(typeInfo);
//    tempVar.setAnnotationType(AnnotationType.SingleMember);
//
//    var param = getDtmAttribute(getContext().getBeforeQueryDtmInfo());
//    tempVar.setSingleParam(param);
//    return tempVar;
//  }
//
//  protected final Expression getDtmAttribute(DtmTypeInfo dtmTypeInfo) {
//    var initList = getInitializer(dtmTypeInfo.getDeterminationTypes());
//    var init = ast.newArrayInitializer();
//    init.expressions().addAll(initList);
//    return init;
//  }
//
//  protected final Expression getValAttribute(ValTypeInfo typeInfo) {
//    var initList = getInitializer(typeInfo.getValidationTypes());
//    var init = ast.newArrayInitializer();
//    init.expressions().addAll(initList);
//    return init;
//  }
//
//  @Override
//  protected java.util.ArrayList<BaseGenerator> createClassExtendChildGenrators() {
//    java.util.ArrayList<BaseGenerator> list = super.createClassExtendChildGenrators();
//    if (list == null) {
//      list = new java.util.ArrayList<BaseGenerator>();
//    }
//    list.add(new MgrAssFactoryImplGenerator(getBefCoreGenCtx()));
//    list.add(new B4QueryDtmAdaptorsGenerator(getContext()));
//    list.add(new B4RetrieveDtmAdaptorsGenerator(getContext()));
//    list.add(new UQConstraintInfoGenerator(getBefCoreGenCtx()));
//    return list;
//  }
//
//  private AnnotationInfo getAssemblerAttribute() {
//    AnnotationInfo tempVar = new AnnotationInfo();
//
//    var annotationType = new TypeInfo("AssemblerAttribute");
//    annotationType.setTypePackageName("com.inspur.edp.bef.api.attr");
//    tempVar.setTypeInfo(annotationType);
//
//    var param1 = ast.newTypeLiteral();
//    param1.setType(getBefCoreGenCtx().getBeGenCtx().getMgrAssFactoryInterfaceType().getType(ast));
//
//    tempVar.getParams().put("assInterfaceType", param1);
//
//    var param2 = ast.newTypeLiteral();
//    param2.setType(
//        ast.newSimpleType(
//            ast.newName(getBefCoreGenCtx().getMgrActionAssFactoryImplType().getFullName())));
//
//    tempVar.getParams().put("assImplType", param2);
//    return tempVar;
//  }
//
//  private AnnotationInfo getUQConstraintAttribute() {
//    MediateType type = getBefCoreGenCtx().getUQConstraintInfoType();
//    AnnotationInfo tempVar = new AnnotationInfo();
//    var annotationType = new TypeInfo("UQConstraintInfoAttribute");
//    annotationType.setTypePackageName("com.inspur.edp.cef.api.attr");
//    tempVar.setTypeInfo(annotationType);
//    tempVar.setAnnotationType(AnnotationType.SingleMember);
//
//    var param = ast.newTypeLiteral();
//    param.setType(ast.newSimpleType(ast.newName(type.getFullName())));
//    tempVar.setSingleParam(param);
//    return tempVar;
//  }
//
//      private void addVarConfigAttribute(java.util.ArrayList<AnnotationInfo> attributes) {
//          if (getBefCoreGenCtx().getBE().getVariables() == null) {
//              return;
//          }
//
//          MgrConfig tempVar = new MgrConfig();
//
//          tempVar.setAllInterfaceClassName(getBefCoreGenCtx().getBeGenCtx().getVarGenCtx()
//                  .getMgrAllInterfaceType().getFullName());
//
//   tempVar.setClass(getBefCoreGenCtx().getBeGenCtx().getVarGenCtx().getMgrInterfaceType().getFullName());
//
//   tempVar.setImpClass(getBefCoreGenCtx().getBeGenCtx().getVarGenCtx().getMgrImplType().getFullName());
//
//          String configValue = null;
//          try {
//              configValue = new ObjectMapper().writeValueAsString(tempVar);
//          } catch (JsonProcessingException e) {
//              throw new RuntimeException(e);
//          }
//          AnnotationInfo tempVar2 = new AnnotationInfo();
//        TypeInfo annotationType = new TypeInfo("VarConfigAttribute");
//          annotationType.setTypePackageName("com.inspur.edp.cef.api.attr");
//          tempVar2.setTypeInfo(annotationType);
//          tempVar2.setAnnotationType(AnnotationType.Normal);
//
//        StringLiteral value = ast.newStringLiteral();
//          value.setLiteralValue(configValue);
//          tempVar2.getParams().put("configStr",value);
//
//          attributes.add(tempVar2);
//      }
//
//  @Override
//  protected void beforeGenerate() {
//    super.beforeGenerate();
//    if (getBefCoreGenCtx().getBeGenCtx().getMetadata().getHeader().isExtendable()) {
//      getContext().getExtendProviders()
//          .add(new MediateType("com.inspur.edp.customize.bef", "BefCtmManagerExtend"));
//    }
//  }
//
//  //    @Override
//  //    protected java.util.ArrayList<AnnotationInfo> getAttributeList() {
//  //
//  //        var rez = ((super.getAttributeList()) != null) ? super.getAttributeList() : new
//  // java.util.ArrayList<AnnotationInfo>();
//  //        addVarConfigAttribute(rez);
//  //        return rez;
//  //    }
//  //
//  //    private void addVarConfigAttribute(java.util.ArrayList<AnnotationInfo> attributes) {
//  //        if (getBefCoreGenCtx().getBE().getVariables() == null) {
//  //            return;
//  //        }
//  //
//  //        MgrConfig tempVar = new MgrConfig();
//  //
//  // tempVar.setAllInterfaceAssembly(getBefCoreGenCtx().getBeGenCtx().getMetadataJitContext().getProjectInfoList().get(0).AssemblyName);
//  ////		tempVar.Assembly =
//  // BefCoreGenCtx.getBeGenCtx().MetadataJitContext.ProjectInfoList[0].AssemblyName;
//  //        tempVar.setAllInterfaceClassName(getBefCoreGenCtx().getBeGenCtx().getVarGenCtx()
//  //                .getMgrAllInterfaceType().getFullName());
//  //
//  // tempVar.setClass(getBefCoreGenCtx().getBeGenCtx().getVarGenCtx().getMgrInterfaceType().getFullName());
//  //        tempVar.setImpAssembly(getBefCoreGenCtx().getBeGenCtx().getMetadataJitContext().
//  //                getProjectInfoList().get(1).AssemblyName);
//  //
//  // tempVar.setImpClass(getBefCoreGenCtx().getBeGenCtx().getVarGenCtx().getMgrImplType().getFullName());
//  //
//  //        String configValue = null;
//  //        try {
//  //            configValue = new ObjectMapper().writeValueAsString(tempVar);
//  //        } catch (JsonProcessingException e) {
//  //            throw new RuntimeException();
//  //        }
//  //        AnnotationInfo tempVar2 = new AnnotationInfo();
//  //        var annotationType = new TypeInfo("VarConfigAttribute");
//  //        annotationType.setTypePackageName("com.inspur.edp.cef.api.attr");
//  //        tempVar2.setTypeInfo(annotationType);
//  //        tempVar2.setAnnotationType(AnnotationType.SingleMember);
//  //
//  //        var value = ast.newStringLiteral();
//  //        value.setLiteralValue(configValue);
//  //        tempVar2.setSingleParam(value);
//  //
//  //        attributes.add(tempVar2);
//  //    }
//
//  // endregion
//
//}
